home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1990-09-16 | 42.2 KB | 1,597 lines
section ax,code_c opt c-,d+,w-,o+ include 'df1:insert/custom registers' badd=((40*8)*256)/8 cadd=56*256 jsr bpinit move.w eyes+(badd*4),x1 move.w eyes+(badd*4)+2,x2 move.w eyes+(badd*4)+4,x3 move.w eyes+(badd*4)+6,x4 move.w eyes+(badd*4)+8,x5 move.w eyes+(badd*4)+10,x6 move.w eyes+(badd*4)+12,x7 move.w eyes+(badd*4)+14,x8 move.w eyes+(badd*4)+16,x9 move.w eyes+(badd*4)+18,x10 move.w eyes+(badd*4)+20,x11 move.w eyes+(badd*4)+22,x12 move.w eyes+(badd*4)+24,x13 move.w eyes+(badd*4)+26,x14 move.w eyes+(badd*4)+28,x15 move.w eyes+(badd*4)+30,x16 move.w eyes+(badd*4)+2,y2 move.w eyes+(badd*4)+4,y3 move.w eyes+(badd*4)+6,y4 move.w eyes+(badd*4)+8,y5 move.w eyes+(badd*4)+10,y6 move.w eyes+(badd*4)+12,y7 move.w eyes+(badd*4)+14,y8 move.w eyes+(badd*4)+16,y9 move.w eyes+(badd*4)+18,y10 move.w eyes+(badd*4)+20,y11 move.w eyes+(badd*4)+22,y12 move.w eyes+(badd*4)+24,y13 move.w eyes+(badd*4)+26,y14 move.w eyes+(badd*4)+28,y15 move.w eyes+(badd*4)+30,y16 lea $dff000,a6 move.w #$87e0,dmacon(a6) move.l #table,a3 move.l a3,baz jsr cop_init move.l $6c,oldirq move.l #newirq,$6c moveq #0,d0 mse: cmp.b #$20,$dff006 bne mse btst #6,$bfe001 bne mse move.w #$0f,$dff096 move.l oldirq,$6c move.l copaddr,a0 move.l oldcop,(a0) clr.l d0 nolib: rts newirq: movem.l d0-d7/a0-a6,$75000 cmpi.b #1,bogs bne zeg move.b #0,bogs addi.b #1,cods cmpi.b #1,cods bne fredx jsr bobsetupa jsr bobsetupb jsr bobsetupc jsr bobsetupd jmp freg fredx: cmpi.b #2,cods bne fredx1 jsr bobsetupe jsr bobsetupf jsr bobsetupc jsr bobsetupd jmp freg fredx1: cmpi.b #3,cods bne fredx2 jsr bobsetupi jsr bobsetupj jsr bobsetupc jsr bobsetupd jmp freg fregx2: cmpi.b #4,cods bne fredx2 jsr bobsetupm jsr bobsetupn jsr bobsetupc jsr bobsetupd jmp freg fredx2: cmpi.b #5,cods bne fredx25 jsr bobsetupq jsr bobsetupr jsr bobsetupc jsr bobsetupd jmp freg fredx25: cmpi.b #6,cods bne fredx3 jsr bobsetupq jsr bobsetupr jsr bobsetupc jsr bobsetupd jmp freg fredx3: cmpi.b #7,cods bne fredx4 jsr bobsetupm jsr bobsetupn jsr bobsetupc jsr bobsetupd jmp freg fredx4: cmpi.b #8,cods bne fredx5 jsr bobsetupi jsr bobsetupj jsr bobsetupc jsr bobsetupd jmp freg fredx5: cmpi.b #9,cods bne fredx6 jsr bobsetupe jsr bobsetupf jsr bobsetupc jsr bobsetupd jmp freg fredx6: cmpi.b #10,cods bne freg jsr bobsetupa jsr bobsetupb jsr bobsetupc jsr bobsetupd jmp freg freg: cmpi.b #10,cods bne zeg move.b #0,cods zeg: addi.b #1,bogs cmpi.w #$0033,boh bne whodo move.w #$00ff,boh jsr bobsetup cmpi.b #1,bogey bne who1 jsr printy move.b #0,bogey jmp who who1: addi.b #1,bogey jmp who whodo: subi.w #$0044,boh who: jsr bpmusic movem.l $75000,d0-d7/a0-a6 dc.w $4ef9 oldirq: dc.l 0 countx: dc.b 0 baz: dc.l 0 yaz: dc.b 0 gook: dc.b 0 ook: dc.b 0 bogey: dc.b 0 tune: dc.b 0 bogs: dc.b 0 even cop_init: lea screen,a0 move.l a0,d0 move.w d0,lo1 swap d0 move.w d0,hi1 lea screen+cadd,a0 move.l a0,d0 move.w d0,lo2 swap d0 move.w d0,hi2 lea screen+cadd*2,a0 move.l a0,d0 move.w d0,lo3 swap d0 move.w d0,hi3 lea screen+cadd*3,a0 move.l a0,d0 move.w d0,lo4 swap d0 move.w d0,hi4 lea screen+cadd*4,a0 move.l a0,d0 move.w d0,lo5 swap d0 move.w d0,hi5 moveq #$30,d0 lea grafname,a1 move.l $4,a6 jsr -132(A6) move.l $4,A6 jsr -408(a6) tst d0 beq nolib move.l d0,grafbase move.l d0,a6 add.l #$32,d0 move.l d0,a0 move.l a0,copaddr move.l (a0),oldcop move.l #newcop,(a0) rts even grafname: dc.b "graphics.library",0 grafbase: dc.l 0 oldcop: dc.l 0 copaddr: dc.l 0 cods: dc.b 0 even newcop: dc.w $0100,$4800 dc.w $0120 sp1l: dc.w $0000,$0122 sp1h: dc.w $0000 dc.w $0124 sp2l: dc.w $0000,$0126 sp2h: dc.w $0000 dc.w $0128 sp3l: dc.w $0000,$012a sp3h: dc.w $0000 dc.w $012c sp4l: dc.w $0000,$012e sp4h: dc.w $0000 dc.w $0130 sp5l: dc.w $0000,$132 sp5h: dc.w $0000 scr: dc.w $2001,$fffe dc.w $00e0 hi1: dc.w $0000 dc.w $00e2 lo1: dc.w $0000 dc.w $00e4 hi2: dc.w $0000 dc.w $00e6 lo2: dc.w $0000 dc.w $00e8 hi3: dc.w $0000 dc.w $00ea lo3: dc.w $0000 dc.w $00ec hi4: dc.w $0000 dc.w $00ee lo4: dc.w $0000 dc.w $00f0 hi5: dc.w $0000 dc.w $00f2 lo5: dc.w $0000 dc.w $008e,$3021 dc.w $0090,$30f1 dc.w $0092,$0020 dc.w $0094,$00d8 dc.w $0108,$0008 dc.w $010a,$0008 dc.w $0180 x1: dc.w $0000 dc.w $0182 x2: dc.w $0000 dc.w $0184 x3: dc.w $0000 dc.w $0186 x4: dc.w $0000 dc.w $0188 x5: dc.w $0000 dc.w $018a x6: dc.w $0000 dc.w $018c x7: dc.w $0000 dc.w $018e x8: dc.w $0000 dc.w $0190 x9: dc.w $0000 dc.w $0192 x10: dc.w $0000 dc.w $0194 x11: dc.w $0000 dc.w $0196 x12: dc.w $0000 dc.w $0198 x13: dc.w $0000 dc.w $019a x14: dc.w $0000 dc.w $019c x15: dc.w $0000 dc.w $019e x16: dc.w $0000 dc.w $9001,$fffe dc.w $180,$000,$182,$620,$184,$730,$186,$830 dc.w $188,$940,$18a,$950,$18c,$a60,$18e,$b70,$190,$c90 dc.w $192,$da0,$194,$ec0,$196,$f00,$198,$f07,$19a,$f0f dc.w $19c,$80f,$19e,$00f dc.w $9101,$fffe dc.w $0180,$0fff dc.w $9201,$fffe dc.w $0180,$0000 dc.w $0102 boh: dc.w $00ff dc.w $b801,$fffe dc.w $0180,$0fff dc.w $0182 y2: dc.w $0000 dc.w $0184 y3: dc.w $0000 dc.w $0186 y4: dc.w $0000 dc.w $0188 y5: dc.w $0000 dc.w $018a y6: dc.w $0000 dc.w $018c y7: dc.w $0000 dc.w $018e y8: dc.w $0000 dc.w $0190 y9: dc.w $0000 dc.w $0192 y10: dc.w $0000 dc.w $0194 y11: dc.w $0000 dc.w $0196 y12: dc.w $0000 dc.w $0198 y13: dc.w $0000 dc.w $019a y14: dc.w $0000 dc.w $019c y15: dc.w $0000 dc.w $019e y16: dc.w $0000 dc.w $b901,$fffe dc.w $0180,$0000 dc.w $0102,$0000 dc.w $ffff,$fffe even picdata: incbin "df1:graphics/cork.chrset.raw" screen: been: ds.b 56*256*5 bobsetup: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-52,bltdmod(a6) ;Destination Modulo move.w #56-52,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen-2+(56*100),bltdpt(a6) ;Destination Start move.l #screen+(56*100),bltapt(a6) ;Source Start move.w #%0000100000011010,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen-2+(56*100)+cadd,bltdpt(a6) ;Destination Start move.l #screen+(56*100)+cadd,bltapt(a6) ;Source Start move.w #%0000100000011010,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen-2+(56*100)+cadd*2,bltdpt(a6) ;Destination Start move.l #screen+(56*100)+cadd*2,bltapt(a6) ;Source Start move.w #%0000100000011010,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen-2+(56*100)+cadd*3,bltdpt(a6) ;Destination Start move.l #screen+(56*100)+cadd*3,bltapt(a6) ;Source Start move.w #%0000100000011010,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupa: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupb: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupc: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #56-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*160),bltdpt(a6) ;Destination Start move.l #screen+8+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd+8+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd*2+8+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd*3+8+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupd: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #56-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*160),bltdpt(a6) ;Destination Start move.l #screen+34+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd+34+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd*2+34+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*160),bltdpt(a6) ;Destination Start move.l #screen+cadd*3+34+(56*20),bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupe: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupf: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupi: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupj: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+16,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupm: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+24,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupn: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+8,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupq: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+8+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3+32,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts bobsetupr: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-8,bltdmod(a6) ;Destination Modulo move.w #40-8,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*2+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*2,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) move.l #screen+cadd*3+34+(56*20),bltdpt(a6) ;Destination Start move.l #eyes+badd*3,bltapt(a6) ;Source Start move.w #%0000111100000100,bltsize(a6) ;Size (Lo 6 Bits Horiz) rts printy: move.l baz,a3 move.b (a3),yaz move.b (a3)+,ook move.l a3,baz cmpi.b #0,yaz bne frek move.l #table,a3 move.l a3,baz jmp ik frek: cmpi.b #65,yaz ;A bne char2 char1: move.l #picdata,v1+2 move.l #picdata+badd,v2+2 move.l #picdata+badd*2,v3+2 move.l #picdata+badd*3,v4+2 jmp ik char2: cmpi.b #66,yaz ;B bne char3 move.l #picdata+4,v1+2 move.l #picdata+badd+4,v2+2 move.l #picdata+badd*2+4,v3+2 move.l #picdata+badd*3+4,v4+2 jmp ik char3: cmpi.b #67,yaz ;C bne char4 move.l #picdata+8,v1+2 move.l #picdata+badd+8,v2+2 move.l #picdata+badd*2+8,v3+2 move.l #picdata+badd*3+8,v4+2 jmp ik char4: cmpi.b #68,yaz ;D bne char5 move.l #picdata+12,v1+2 move.l #picdata+badd+12,v2+2 move.l #picdata+badd*2+12,v3+2 move.l #picdata+badd*3+12,v4+2 jmp ik char5: cmpi.b #69,yaz ;E bne char6 move.l #picdata+16,v1+2 move.l #picdata+badd+16,v2+2 move.l #picdata+badd*2+16,v3+2 move.l #picdata+badd*3+16,v4+2 jmp ik char6: cmpi.b #70,yaz ;F bne char7 move.l #picdata+20,v1+2 move.l #picdata+badd+20,v2+2 move.l #picdata+badd*2+20,v3+2 move.l #picdata+badd*3+20,v4+2 jmp ik char7: cmpi.b #71,yaz ;G bne char8 move.l #picdata+24,v1+2 move.l #picdata+badd+24,v2+2 move.l #picdata+badd*2+24,v3+2 move.l #picdata+badd*3+24,v4+2 jmp ik char8: cmpi.b #72,yaz ;H bne char9 move.l #picdata+28,v1+2 move.l #picdata+badd+28,v2+2 move.l #picdata+badd*2+28,v3+2 move.l #picdata+badd*3+28,v4+2 jmp ik char9: cmpi.b #73,yaz ;I bne char10 move.l #picdata+32,v1+2 move.l #picdata+badd+32,v2+2 move.l #picdata+badd*2+32,v3+2 move.l #picdata+badd*3+32,v4+2 jmp ik char10: cmpi.b #74,yaz ;J bne char11 move.l #picdata+36,v1+2 move.l #picdata+badd+36,v2+2 move.l #picdata+badd*2+36,v3+2 move.l #picdata+badd*3+36,v4+2 jmp ik char11: cmpi.b #75,yaz ;K bne char12 move.l #picdata+1280,v1+2 move.l #picdata+badd+1280,v2+2 move.l #picdata+badd*2+1280,v3+2 move.l #picdata+badd*3+1280,v4+2 jmp ik char12: cmpi.b #76,yaz ;L bne char13 move.l #picdata+1280+4,v1+2 move.l #picdata+badd+1280+4,v2+2 move.l #picdata+badd*2+1280+4,v3+2 move.l #picdata+badd*3+1280+4,v4+2 jmp ik char13: cmpi.b #77,yaz ;M bne char14 move.l #picdata+1280+8,v1+2 move.l #picdata+badd+1280+8,v2+2 move.l #picdata+badd*2+1280+8,v3+2 move.l #picdata+badd*3+1280+8,v4+2 jmp ik char14: cmpi.b #78,yaz ;N bne char15 move.l #picdata+1280+12,v1+2 move.l #picdata+badd+1280+12,v2+2 move.l #picdata+badd*2+1280+12,v3+2 move.l #picdata+badd*3+1280+12,v4+2 jmp ik char15: cmpi.b #79,yaz ;O bne char16 move.l #picdata+1280+16,v1+2 move.l #picdata+badd+1280+16,v2+2 move.l #picdata+badd*2+1280+16,v3+2 move.l #picdata+badd*3+1280+16,v4+2 jmp ik char16: cmpi.b #80,yaz ;P bne char17 move.l #picdata+1280+20,v1+2 move.l #picdata+badd+1280+20,v2+2 move.l #picdata+badd*2+1280+20,v3+2 move.l #picdata+badd*3+1280+20,v4+2 jmp ik char17: cmpi.b #81,yaz ;Q bne char18 move.l #picdata+1280+24,v1+2 move.l #picdata+badd+1280+24,v2+2 move.l #picdata+badd*2+1280+24,v3+2 move.l #picdata+badd*3+1280+24,v4+2 jmp ik char18: cmpi.b #82,yaz ;R bne char19 move.l #picdata+1280+28,v1+2 move.l #picdata+badd+1280+28,v2+2 move.l #picdata+badd*2+1280+28,v3+2 move.l #picdata+badd*3+1280+28,v4+2 jmp ik char19: cmpi.b #83,yaz ;S bne char20 move.l #picdata+1280+32,v1+2 move.l #picdata+badd+1280+32,v2+2 move.l #picdata+badd*2+1280+32,v3+2 move.l #picdata+badd*3+1280+32,v4+2 jmp ik char20: cmpi.b #84,yaz ;T bne char21 move.l #picdata+1280+36,v1+2 move.l #picdata+badd+1280+36,v2+2 move.l #picdata+badd*2+1280+36,v3+2 move.l #picdata+badd*3+1280+36,v4+2 jmp ik char21: cmpi.b #85,yaz ;U bne char22 move.l #picdata+2560,v1+2 move.l #picdata+badd+2560,v2+2 move.l #picdata+badd*2+2560,v3+2 move.l #picdata+badd*3+2560,v4+2 jmp ik char22: cmpi.b #86,yaz ;V bne char23 move.l #picdata+2560+4,v1+2 move.l #picdata+badd+2560+4,v2+2 move.l #picdata+badd*2+2560+4,v3+2 move.l #picdata+badd*3+2560+4,v4+2 jmp ik char23: cmpi.b #87,yaz ;W bne char24 move.l #picdata+2560+8,v1+2 move.l #picdata+badd+2560+8,v2+2 move.l #picdata+badd*2+2560+8,v3+2 move.l #picdata+badd*3+2560+8,v4+2 jmp ik char24: cmpi.b #88,yaz ;X bne char25 move.l #picdata+2560+12,v1+2 move.l #picdata+badd+2560+12,v2+2 move.l #picdata+badd*2+2560+12,v3+2 move.l #picdata+badd*3+2560+12,v4+2 jmp ik char25: cmpi.b #89,yaz ;Y bne char26 move.l #picdata+2560+16,v1+2 move.l #picdata+badd+2560+16,v2+2 move.l #picdata+badd*2+2560+16,v3+2 move.l #picdata+badd*3+2560+16,v4+2 jmp ik char26: cmpi.b #90,yaz ;Z bne char27 move.l #picdata+2560+20,v1+2 move.l #picdata+badd+2560+20,v2+2 move.l #picdata+badd*2+2560+20,v3+2 move.l #picdata+badd*3+2560+20,v4+2 jmp ik char27: cmpi.b #32,yaz ;SPACE bne char32 move.l #picdata+5120+24,v1+2 move.l #picdata+badd+5120+24,v2+2 move.l #picdata+badd*2+5120+24,v3+2 move.l #picdata+badd*3+5120+24,v4+2 jmp ik char32: cmpi.b #46,yaz ;. = BEER bne char33 move.l #picdata+2560+1280+24,v1+2 move.l #picdata+badd+2560+1280+24,v2+2 move.l #picdata+badd*2+2560+1280+24,v3+2 move.l #picdata+badd*3+2560+1280+24,v4+2 jmp ik char33: cmpi.b #48,yaz ;0 bne char34 move.l #picdata+2560+24,v1+2 move.l #picdata+badd+2560+24,v2+2 move.l #picdata+badd*2+2560+24,v3+2 move.l #picdata+badd*3+2560+24,v4+2 jmp ik char34: cmpi.b #49,yaz ;1 bne char35 move.l #picdata+2560+28,v1+2 move.l #picdata+badd+2560+28,v2+2 move.l #picdata+badd*2+2560+28,v3+2 move.l #picdata+badd*3+2560+28,v4+2 jmp ik char35: cmpi.b #50,yaz ;2 bne char36 move.l #picdata+2560+32,v1+2 move.l #picdata+badd+2560+32,v2+2 move.l #picdata+badd*2+2560+32,v3+2 move.l #picdata+badd*3+2560+32,v4+2 jmp ik char36: cmpi.b #51,yaz ;3 bne char37 move.l #picdata+2560+36,v1+2 move.l #picdata+badd+2560+36,v2+2 move.l #picdata+badd*2+2560+36,v3+2 move.l #picdata+badd*3+2560+36,v4+2 jmp ik char37: cmpi.b #52,yaz ;4 bne char38 move.l #picdata+2560+2560+4,v1+2 move.l #picdata+badd+2560+2560+4,v2+2 move.l #picdata+badd*2+2560+2560+4,v3+2 move.l #picdata+badd*3+2560+2560+4,v4+2 jmp ik char38: cmpi.b #53,yaz ;5 bne char39 move.l #picdata+2560+1280,v1+2 move.l #picdata+badd+2560+1280,v2+2 move.l #picdata+badd*2+2560+1280,v3+2 move.l #picdata+badd*3+2560+1280,v4+2 jmp ik char39: cmpi.b #54,yaz ;6 bne char40 move.l #picdata+2560+1280+4,v1+2 move.l #picdata+badd+2560+1280+4,v2+2 move.l #picdata+badd*2+2560+1280+4,v3+2 move.l #picdata+badd*3+2560+1280+4,v4+2 jmp ik char40: cmpi.b #55,yaz ;7 bne char41 move.l #picdata+2560+1280+8,v1+2 move.l #picdata+badd+2560+1280+8,v2+2 move.l #picdata+badd*2+2560+1280+8,v3+2 move.l #picdata+badd*3+2560+1280+8,v4+2 jmp ik char41: cmpi.b #56,yaz ;8 bne char42 move.l #picdata+2560+1280+12,v1+2 move.l #picdata+badd+2560+1280+12,v2+2 move.l #picdata+badd*2+2560+1280+12,v3+2 move.l #picdata+badd*3+2560+1280+12,v4+2 jmp ik char42: cmpi.b #57,yaz ;9 bne char43 move.l #picdata+2560+1280+16,v1+2 move.l #picdata+badd+2560+1280+16,v2+2 move.l #picdata+badd*2+2560+1280+16,v3+2 move.l #picdata+badd*3+2560+1280+16,v4+2 jmp ik char43: cmpi.b #91,yaz ;ZARCH IS INNOCENT = [ bne char44 move.l #picdata+2560+1280+20,v1+2 move.l #picdata+badd+2560+1280+20,v2+2 move.l #picdata+badd*2+2560+1280+20,v3+2 move.l #picdata+badd*3+2560+1280+20,v4+2 jmp ik char44: cmpi.b #93,yaz ;' = ] bne char47 jmp ik char47: ik: lea $dff000,a6 move.l #-1,bltafwm(a6) move.w #$09f0,bltcon0(a6) clr.w bltcon1(a6) clr.w bltamod(a6) move.w #56-4,bltdmod(a6) ;Destination Modulo move.w #40-4,bltamod(a6) ;Source Modulo (Scr Width - bob width) move.l #screen+48+(56*100),bltdpt(a6) ;Destination Start v1: move.l #picdata,bltapt(a6) ;Source Start move.w #%0000100000000010,bltsize(a6) move.l #screen+48+(56*100)+cadd,bltdpt(a6) ;Destination Start v2: move.l #picdata+badd,bltapt(a6) ;Source Start move.w #%0000100000000010,bltsize(a6) move.l #screen+48+(56*100)+cadd*2,bltdpt(a6) ;Destination Start v3: move.l #picdata+badd*2,bltapt(a6) ;Source Start move.w #%0000100000000010,bltsize(a6) move.l #screen+48+(56*100)+cadd*3,bltdpt(a6) ;Destination Start v4: move.l #picdata+badd*3,bltapt(a6) ;Source Start move.w #%0000100000000010,bltsize(a6) rts baj: move.b #0,gook rts table: ;dc.b 'INNER CITY PROUDLY PRESENT .REVELUTION. ' ;dc.b 'CODER BY .AX. GRAPHIICS BY .GIZ. QUESTIONS BY .POD.' ;dc.b ' INSTRUSTIONS F1 MUSIC ON F10 SOUND FX ... ' dc.b 'GREETINGS GO OUT TO THE FOLLOWING GROUPS RANDOM [[[[[ SCOOPEX REACTOR CRYPTIC UK SLIPSTREAM ANARCHY MAG FIELDS SAE MODESTY ' dc.b ' QUARTEX CLASSIC SKID ROW PENDEL EUROPA BLACK BOX AUTOMATION PARADOX EXTREAM MIGHTY DRUIDS ORACLE POWERLORDS ' DC.B 'MEGA GREETING`S GO TO.AX. .COSY. .WAZ. .OPEL.[ZARCH[ .SCOOTER. .MIKE. .PLUNDERER & TONY. .MR BIG JUDGE DROKK. .JROK 90. .OMAR & MOSES.' DC.B '.DEMOLISHER. .BOB. .ANDY STEVE. ....KID VIDEO ( WHERE`S MY VID`S).... .FANGS ( YOU LAZY CUNT GET CODING ). FAST EDDIE. .TEKNO TISKY. .CRAZY LEGS. .CASP ( CASP KEEP UP WITH THE GOOD MUSIC ).' DC.B '.ADS (I WILL COME AND VISIT YOU IN THE NIK ). .RICK (SO WE GOT THE DEMO`S FINISHED). .QED (YOU TIGHT CUNT GET YOU COMPUTER). .DOMINO (HOW`S THE BBS COMING ON). THE ENGINER (ADS HAS GOT THE UTILITY). .DAX (KEEP CODING)' DC.B ' .REEBOK (IT`S UP TO YOU)..................' DC.B ' SO THAT`S THE END OF MY GREETING`S TO DAY I WILL PASS THE KEY BOARD ON TO RICK NOW SO BY FOR POD OF THE MIGHTY INNER CITY' dc.b ' BY THE WAY THE INTRO PICTURES TAKEN FROM THE MOVIE HIGHLANDER DIGITIZED BY POD AND AX ' dc.b ' ' dc.b 'INTRO BY AX GRAPHIX BY GIZ ' dc.b 0 even eyes: incbin 'df1:graphics/eyes.raw' even bpinit: lea samples(pc),a0 lea bpsong(pc),a1 clr.b numtables cmpi.w #'V.',26(a1) bne.s bpnotv2 cmpi.b #'2',28(a1) bne.s bpnotv2 move.b 29(a1),numtables bpnotv2: move.l #512,d0 move.w 30(a1),d1 ;d1 now contains length in steps moveq.l #1,d2 ;1 is highest pattern number mulu #4,d1 ;4 voices per step subq.w #1,d1 ;correction for DBRA findhighest: cmp.w (a1,d0),d2 ;Is it higher bge.s nothigher ;No move.w (a1,d0),d2 ;Yes, so let D2 be highest nothigher: addq.l #4,d0 ;Next Voice dbra d1,findhighest ;And search move.w 30(a1),d1 mulu #16,d1 ;16 bytes per step move.l #512,d0 ;header is 512 bytes mulu #48,d2 ;48 bytes per pattern add.l d2,d0 add.l d1,d0 ;offset for samples add.l #bpsong,d0 move.l d0,tables moveq.l #0,d1 move.b numtables,d1 ;Number of tables lsl.l #6,d1 ;x 64 add.l d1,d0 move.l #14,d1 ;15 samples add.l #32,a1 initloop: move.l d0,(a0)+ cmpi.b #$ff,(a1) beq.s bpissynth move.w 24(a1),d2 mulu #2,d2 ;Length is in words add.l d2,d0 ;offset next sample bpissynth: add.l #32,a1 ;Length of Sample Part in header dbra d1,initloop rts bpmusic: bsr bpsynth subq.b #1,arpcount moveq.l #3,d0 lea bpcurrent(pc),a0 move.l #$dff0a0,a1 bploop1: move.b 12(a0),d4 ext.w d4 add.w d4,(a0) tst.b $1e(a0) bne.s bplfo move.w (a0),6(a1) bplfo: move.l 4(a0),(a1) move.w 8(a0),4(a1) tst.b 11(a0) bne.s bpdoarp tst.b 13(a0) beq.s not2 bpdoarp: tst.b arpcount bne.s not0 move.b 11(a0),d3 move.b 13(a0),d4 and.w #240,d4 and.w #240,d3 lsr.w #4,d3 lsr.w #4,d4 add.w d3,d4 add.b 10(a0),d4 bsr bpplayarp bra.s not2 not0: cmpi.b #1,arpcount bne.s not1 move.b 11(a0),d3 move.b 13(a0),d4 and.w #15,d3 and.w #15,d4 add.w d3,d4 add.b 10(a0),d4 bsr bpplayarp bra.s not2 not1: move.b 10(a0),d4 bsr bpplayarp not2: lea $10(a1),a1 lea $20(a0),a0 dbra d0,bploop1 tst.b arpcount bne.s arpnotzero move.b #3,arpcount arpnotzero: subq.b #1,bpcount beq.s bpskip1 rts bpskip1: move.b bpdelay,bpcount bpplay: bsr.s bpnext move.w dma,$dff096 ;move.l #$1f4,d0 ;is this a waste ????? bpxx: ;dbra d0,bpxx moveq.l #3,d0 move.l #$dff0a0,a1 moveq.w #1,d1 lea bpcurrent(pc),a2 lea bpbuffer(pc),a5 bploop2: btst #15,(a2) beq.s bpskip7 bsr bpplayit bpskip7: asl.w #1,d1 lea $10(a1),a1 lea $20(a2),a2 lea $24(a5),a5 dbra d0,bploop2 rts bpnext: clr.w dma lea bpsong(pc),a0 move.l #$dff0a0,a3 moveq.l #3,d0 moveq.w #1,d7 lea bpcurrent(pc),a1 bploop3: moveq.l #0,d1 move.w bpstep,d1 lsl.w #4,d1 move.l d0,d2 lsl.l #2,d2 add.l d2,d1 add.l #512,d1 move.w (a0,d1),d2 move.b 2(a0,d1),st move.b 3(a0,d1),tr subq.w #1,d2 mulu #48,d2 moveq.l #0,d3 move.w 30(a0),d3 lsl.w #4,d3 add.l d2,d3 move.l #$00000200,d4 move.b bppatcount,d4 add.l d3,d4 move.l d4,a2 add.l a0,a2 moveq.l #0,d3 move.b (a2),d3 tst.b d3 bne.s bpskip4 bra bpoptionals bpskip4: clr.w 12(a1) ;Clear autoslide/autoarpeggio move.b 1(a2),d4 and.b #15,d4 cmpi.b #10,d4 ;Option 10->transposes off bne.s bp_do1 move.b 2(a2),d4 and.b #240,d4 ;Higher nibble=transpose bne.s bp_not1 bp_do1: add.b tr,d3 ext.w d3 bp_not1: move.b d3,10(a1) ; Voor Arpeggio's lea bpper(pc),a4 lsl.w #1,d3 move.w -2(a4,d3.w),(a1) bset #15,(a1) move.b #$ff,2(a1) moveq.w #0,d3 move.b 1(a2),d3 lsr.b #4,d3 and.b #15,d3 tst.b d3 bne.s bpskip5 move.b 3(a1),d3 bpskip5: move.b 1(a2),d4 and.b #15,d4 cmpi.b #10,d4 ;option 10 bne.s bp_do2 move.b 2(a2),d4 and.b #15,d4 bne.s bp_not2 bp_do2: add.b st,d3 bp_not2: cmpi.w #1,8(a1) beq.s bpsamplechange cmp.b 3(a1),d3 beq.s bpoptionals bpsamplechange: move.b d3,3(a1) or.w d7,dma bpoptionals: moveq.l #0,d3 moveq.l #0,d4 move.b 1(a2),d3 and.b #15,d3 move.b 2(a2),d4 cmpi.b #0,d3 ; Optionals Here bne.s notopt0 move.b d4,11(a1) notopt0: cmpi.b #1,d3 bne.s bpskip3 move.w d4,8(a3) move.b d4,2(a1) ; Volume ook in BPCurrent bpskip3: cmpi.b #2,d3 ; Set Speed bne.s bpskip9 move.b d4,bpcount move.b d4,bpdelay bpskip9: cmpi.b #3,d3 ; Filter = LED control bne.s bpskipa tst.b d4 bne.s bpskipb bset #1,$bfe001 bra.s bpskip2 bpskipb: bclr #1,$bfe001 bpskipa: cmpi.b #4,d3 ; PortUp bne.s noportup sub.w d4,(a1) ; Slide data in BPCurrent clr.b 11(a1) ; Arpeggio's uit noportup: cmpi.b #5,d3 ; PortDown bne.s noportdn add.w d4,(a1) ; Slide down clr.b 11(a1) noportdn: cmpi.b #6,d3 ; SetRepCount bne.s notopt6 move.b d4,bprepcount notopt6: cmpi.b #7,d3 ; DBRA repcount bne.s notopt7 subq.b #1,bprepcount beq.s notopt7 move.w d4,bpstep notopt7: cmpi.b #8,d3 ;Set AutoSlide bne.s notopt8 move.b d4,12(a1) notopt8: cmpi.b #9,d3 ;Set AutoArpeggio bne.s notopt9 move.b d4,13(a1) notopt9: bpskip2: lea $10(a3),a3 lea $20(a1),a1 asl.w #1,d7 dbra d0,bploop3 addq.b #3,bppatcount cmpi.b #48,bppatcount bne.s bpskip8 move.b #0,bppatcount addq.w #1,bpstep lea bpsong(pc),a0 move.w 30(a0),d1 cmp.w bpstep,d1 bne.s bpskip8 move.w #0,bpstep bpskip8: rts bpplayit: bclr #15,(a2) tst.l (a5) ;Was EG used beq.s noeg1 ;No ?? moveq.w #0,d3 ;Well then copy move.l (a5),a4 ;Old waveform back moveq #7,d7 ;to waveform tables eg1loop: move.l 4(a5,d3.w),(a4)+ ;Copy... addq.w #4,d3 ;Copy... dbra d7,eg1loop ;Copy... noeg1: move.w (a2),6(a1) ;Period from bpcurrent moveq.l #0,d7 move.b 3(a2),d7 ;Instrument number move.l d7,d6 ;Also in d6 lsl.l #5,d7 ;Header offset lea bpsong(pc),a3 cmpi.b #$ff,(a3,d7.w) ;Is synthetic beq.s bpplaysynthetic ;Yes ?? clr.l (a5) ;EG Off clr.b $1a(a2) ;Synthetic mode off clr.w $1e(a2) ;Lfo Off add.l #24,d7 ;24 is name->ignore lsl.l #2,d6 ;x4 for sample offset move.l #samples,a4 move.l -4(a4,d6),d4 ;Fetch sample pointer beq.s bp_nosamp ;is zero->no sample move.l d4,(a1) ;Sample pointer in hardware move.w (a3,d7),4(a1) ;length in hardware move.b 2(a2),9(a1) ;and volume from bpcurrent cmpi.b #$ff,2(a2) ;Use default volume bne.s skipxx ;No ?? move.w 6(a3,d7),8(a1) ;Default volume in hardware skipxx: move.w 4(a3,d7),8(a2) ;Length in bpcurrent moveq.l #0,d6 move.w 2(a3,d7),d6 ;Calculate repeat add.l d6,d4 move.l d4,4(a2) ;sample start in bpcurrent cmpi.w #1,8(a2) ;has sample repeat part bne.s bpskip6 ;Yes ?? bp_nosamp: move.l #null,4(a2) ;Play no sample bra.s bpskip10 bpskip6: move.w 8(a2),4(a1) ;Length to hardware move.l 4(a2),(a1) ;pointer to hardware bpskip10: or.w #$8000,d1 ;Turn on DMA for this voice move.w d1,$dff096 ;Yeah, do it rts bpplaysynthetic:move.b #$1,$1a(a2) ;Synthetic mode on clr.w $e(a2) ;EG Pointer restart clr.w $10(a2) ;LFO Pointer restart clr.w $12(a2) ;ADSR Pointer restart move.w 22(a3,d7.w),$14(a2) ;EG Delay addq.w #1,$14(a2) ;0 is nodelay move.w 14(a3,d7.w),$16(a2) ;LFO Delay addq.w #1,$16(a2) ;So I need correction move.w #1,$18(a2) ;ADSR Delay->Start immediate move.b 17(a3,d7.w),$1d(a2) ;EG OOC move.b 9(a3,d7.w),$1e(a2) ;LFO OOC move.b 4(a3,d7.w),$1f(a2) ;ADSR OOC move.b 19(a3,d7.w),$1c(a2) ;Current EG Value move.l tables,a4 ; so far so good,now what ?? moveq.l #0,d3 ;Pointer to waveform tables move.b 1(a3,d7.w),d3 ;Which waveform lsl.l #6,d3 ;x64 is length waveform table add.l d3,a4 move.l a4,(a1) ;Sample Pointer move.l a4,4(a2) ;In bpcurrent move.w 2(a3,d7.w),4(a1) ;Length in words move.w 2(a3,d7.w),8(a2) ;Length in bpcurrent tst.b 4(a3,d7.w) ;Is ADSR on beq.s bpadsroff ;No ?? move.l tables,a4 ;Tables moveq.l #0,d3 move.b 5(a3,d7.w),d3 ;ADSR table number lsl.l #6,d3 ;x64 for length add.l d3,a4 ;Add it moveq.w #0,d3 move.b (a4),d3 ;Get table value add.b #128,d3 ;I want it from 0..255 lsr.w #2,d3 ;Divide by 4->0..63 cmpi.b #$ff,2(a2) bne.s bpskip99 move.b 25(a3,d7.w),2(a2) bpskip99: moveq.w #0,d4 move.b 2(a2),d4 ;Default volume mulu d4,d3 ;default maal init volume lsr.w #6,d3 ;divide by 64 move.w d3,8(a1) ;is new volume bra.s bpflipper bpadsroff: move.b 2(a2),9(a1) cmpi.b #$ff,2(a2) bne.s bpflipper ;No ADSR move.b 25(a3,d7.w),9(a1) ;So use default volume bpflipper: move.l 4(a2),a4 ;Pointer on waveform move.l a4,(a5) ;Save it moveq.w #0,d3 ;Save Old waveform moveq #7,d4 ;data in bpbuffer eg2loop: move.l (a4,d3.w),4(a5,d3.w) addq.w #4,d3 ;Copy dbra d4,eg2loop tst.b 17(a3,d7.w) ;EG off beq bpskip10 ;Yes ?? tst.b 19(a3,d7.w) ;Is there an init value for EG beq bpskip10 ;No ?? moveq.l #0,d3 move.b 19(a3,d7.w),d3 lsr.l #3,d3 ;Divide by 8 ->0..31 move.b d3,$1c(a2) ;Current EG Value subq.l #1,d3 ;-1,DBRA correction eg3loop: neg.b (a4)+ dbra d3,eg3loop bra bpskip10 bpplayarp: lea bpper(pc),a4 ext.w d4 asl.w #1,d4 move.w -2(a4,d4.w),6(a1) rts bpsynth: move.l #3,d0 lea bpcurrent(pc),a2 lea $dff0a0,a1 lea bpsong(pc),a3 lea bpbuffer(pc),a5 bpsynthloop: tst.b $1a(a2) ;Is synthetic sound beq.s bpnosynth ;No ?? bsr.s bpyessynth ;Yes bpnosynth: lea $24(a5),a5 lea $20(a2),a2 lea $10(a1),a1 dbra d0,bpsynthloop rts bpyessynth: moveq.w #0,d7 move.b 3(a2),d7 ;Which instr. was I playing lsl.w #5,d7 ;x32, is length of instr. tst.b $1f(a2) ;ADSR off beq.s bpendadsr ;Yes ?? subq.w #1,$18(a2) ;Delay,May I bne.s bpendadsr ;No ?? moveq.l #0,d3 move.b 8(a3,d7.w),d3 move.w d3,$18(a2) ;Reset Delay Counter move.l tables,a4 move.b 5(a3,d7.w),d3 ;Which ADSR table lsl.l #6,d3 ;x64 add.l d3,a4 ;This is my table move.w $12(a2),d3 ;Get ADSR table pointer moveq.w #0,d4 move.b (a4,d3.w),d4 ;Value from table add.b #128,d4 ;Want it from 0..255 lsr.w #2,d4 ;And now from 0..63 moveq.w #0,d3 move.b 2(a2),d3 ;Current Volume mulu d3,d4 ;MultiPly with table volume lsr.w #6,d4 ;Divide by 64=New volume move.w d4,8(a1) ;Volume in hardware addq.w #1,$12(a2) ;Increment of ADSR pointer move.w 6(a3,d7.w),d4 ;Length of adsr table cmp.w $12(a2),d4 ;End of table reached bne.s bpendadsr ;No ?? clr.w $12(a2) ;Clear ADSR Pointer cmpi.b #1,$1f(a2) ;Once bne.s bpendadsr ;No ?? clr.b $1f(a2) ;ADSR off bpendadsr: tst.b $1e(a2) ;LFO On beq.s bpendlfo ;No ?? subq.w #1,$16(a2) ;LFO delay,May I bne.s bpendlfo ;No moveq.l #0,d3 move.b 16(a3,d7.w),d3 move.w d3,$16(a2) ;Set LFO Count move.l tables,a4 move.b 10(a3,d7.w),d3 ;Which LFO table lsl.l #6,d3 ;x64 add.l d3,a4 move.w $10(a2),d3 ;LFO pointer moveq.l #0,d4 move.b (a4,d3.w),d4 ;That's my value ext.w d4 ;Make it a word ext.l d4 ;And a longword moveq.l #0,d5 move.b 11(a3,d7.w),d5 ;LFO depth tst.b d5 beq.s bpnotx divs d5,d4 ;Calculate it bpnotx: move.w (a2),d5 ;Period add.w d4,d5 ;New Period move.w d5,6(a1) ;In hardware addq.w #1,$10(a2) ;Next position move.w 12(a3,d7.w),d3 ;LFO table Length cmp.w $10(a2),d3 ;End Reached bne.s bpendlfo ;NO ?? clr.w $10(a2) ;Reset LFO Pointer cmpi.b #1,$1e(a2) ;Once LFO bne.s bpendlfo ;NO ?? clr.b $1e(a2) ;LFO Off bpendlfo: tst.b $1d(a2) ;EG On beq bpendeg ;No ?? subq.w #1,$14(a2) ;EG delay,May I bne bpendeg ;No tst.l (a5) beq.s bpendeg moveq.l #0,d3 move.b 24(a3,d7.w),d3 move.w d3,$14(a2) ;Set EG Count move.l tables,a4 move.b 18(a3,d7.w),d3 ;Which EG table lsl.l #6,d3 ;x64 add.l d3,a4 move.w $e(a2),d3 ;EG pointer moveq.l #0,d4 move.b (a4,d3.w),d4 ;That's my value move.l (a5),a4 ;Pointer to waveform add.b #128,d4 ;0..255 lsr.l #3,d4 ;0..31 moveq.l #0,d3 move.b $1c(a2),d3 ;Old EG Value move.b d4,$1c(a2) add.l d3,a4 ;WaveForm Position move.l a5,a6 ;Buffer add.l d3,a6 ;Position addq.l #4,a6 ;For adress in buffer cmp.b d3,d4 ;Compare old with new value beq.s bpnexteg ;no change ?? bgt bpishigh ;new value is higher bpislow: sub.l d4,d3 ;oldvalue-newvalue subq.l #1,d3 ;Correction for DBRA bpegloop1a: move.b -(a6),d4 move.b d4,-(a4) dbra d3,bpegloop1a bra.s bpnexteg bpishigh: sub.l d3,d4 ;Newvalue-oldvalue subq.l #1,d4 ;Correction for DBRA bpegloop1b: move.b (a6)+,d3 neg.b d3 move.b d3,(a4)+ ;DoIt dbra d4,bpegloop1b bpnexteg: addq.w #1,$e(a2) ;Next position move.w 20(a3,d7.w),d3 ;EG table Length cmp.w $e(a2),d3 ;End Reached bne.s bpendeg ;NO ?? clr.w $e(a2) ;Reset EG Pointer cmpi.b #1,$1d(a2) ;Once EG bne.s bpendeg ;NO ?? clr.b $1d(a2) ;EG Off bpendeg: rts null: dc.w 0 bpcurrent: dc.w 0,0 ;periode,instrument =(volume.b,instr nr.b) dc.l null ;start dc.w 1 ;length (words) dc.b 0,0,0,0 ;noot,arpeggio,autoslide,autoarpeggio dc.w 0,0,0 ;EG,LFO,ADSR pointers dc.w 0,0,0 ;EG,LFO,ADSR count dc.b 0,0 ;Synthetic yes/no, Volume Slide dc.b 0,0 ;Current EG value,EG OOC dc.b 0,0 ;LFO OOC,ADSR OOC dc.w 0,0 dc.l null dc.w 1,0,0 dc.w 0,0,0,0,0,0,0,0,0 dc.w 0,0 dc.l null dc.w 1,0,0 dc.w 0,0,0,0,0,0,0,0,0 dc.w 0,0 dc.l null dc.w 1,0,0 dc.w 0,0,0,0,0,0,0,0,0 bpstep: dc.w 0 bppatcount: dc.b 0 st: dc.b 0 tr: dc.b 0 bpcount: dc.b 1 bpdelay: dc.b 6 arpcount: dc.b 1 bprepcount: dc.b 1 numtables: dc.b 0 even dma: dc.w 0 tables: dc.l 0 bpbuffer: dcb.b 144,0 dc.w 6848,6464,6080,5760,5440,5120,4832,4576,4320,4064,3840,3616 dc.w 3424,3232,3040,2880,2720,2560,2416,2288,2160,2032,1920,1808 dc.w 1712,1616,1520,1440,1360,1280,1208,1144,1080,1016,0960,0904 bpper: dc.w 0856,0808,0760,0720,0680,0640,0604,0572,0540,0508,0480,0452 dc.w 0428,0404,0380,0360,0340,0320,0302,0286,0270,0254,0240,0226 dc.w 0214,0202,0190,0180,0170,0160,0151,0143,0135,0127,0120,0113 dc.w 0107,0101,0095,0090,0085,0080,0076,0072,0068,0064,0060,0057 samples: dcb.l 15,0 bpsong: incbin "df1:modules/bp.NEVERENDING"